#include "stm32f10x.h"
#include "lcd_zk.h"
#include "led.h"
#include "delay.h"
#include "drv_spi.h"
#include "drv_CC1101.h"
#include "drv_RF24L01.h"
#include "drv_button.h"

#define TX_MODE
int main( void )
{
    uint8_t count;
    delay_init( );
    drv_spi_init( );
    led_init( );
    drv_button_init( );
    delay_ms( 300 );
    initial_lcd( );
    clear_screen( );
    NRF24L01_Gpio_Init( );
    NRF24L01_Init( );

#ifdef TX_MODE
    count = 0;
    display_GB2312_string( 0, 0, "成功发送" );
    display_GB2312_string( 2, 0, "重传次数" );
    display_GB2312_string( 4, 0, "丢包数量" );
    NRF24L01_Set_Mode( MODE_TX );
    NRF24L01_PowerUp( );

    while( 1 )
    {
        //按下按键，进入if
        if( drv_button_check( ) == BUTOTN_PRESS_DOWN )
        {
            
            //清空FIFO
            NRF24L01_Flush_Tx_Fifo( );

            //写入数据到FIFO
            NRF24L01_Write_Tx_Payload_Ack( "awdesq", 6 );
            //启动发射
            NRF24L01_Trig_Tx( );

            while( 1 )
            {
                //发送是否OK
                if( NRF24L01_Read_IRQ_Status( TX_DS ))
                {
                    //打印包成功接收的数量
                    print_byte(0, 80, ++count );
                    //打印重传次数
                    print_byte(2, 80, NRF24L01_Read_ReTransmission_Count( ));
                    //清RX中断标志
                    NRF24L01_Clear_IRQ_Flag( TX_DS);
                    //跳出死循环
                    break;
                }
                //是否达到最大传输次数
                if( NRF24L01_Read_IRQ_Status( MAX_RT ) )
                {
                    //打印丢包数量
                    print_byte(4, 80, NRF24L01_Read_LostPackets_Count( ));
                   //打印重传次数
                    print_byte(2, 80, NRF24L01_Read_ReTransmission_Count( ) );
                    //清中断标志
                    NRF24L01_Clear_IRQ_Flag( MAX_RT );
                    //清除TX_FIFO
                    NRF24L01_Flush_Tx_Fifo( );
                    //跳出死循环
                    break;
                }
            }
        }
    }
#else
    //收到包记数
    count = 0;
    //设置为接收模式
    NRF24L01_Set_Mode( MODE_RX );
    //打开电源
    NRF24L01_PowerUp( );
    //打开CE,开始接收
    RF24L01_SET_CE_HIGH( );
    //打印提示
    display_GB2312_string( 0, 0, "成功接收:" );
    //等待结果
    while( 1 )
    {
        if( NRF24L01_Read_IRQ_Status( RX_DR ))
        {
            count++;
            //清中断标志
            NRF24L01_Clear_IRQ_Flag( RX_DR );
            //清FIFO
            NRF24L01_Flush_Rx_Fifo( );
            //打印结果
            print_byte( 0, 100, count );
        }
    }
#endif
}
////////////////////////////////////////////////////////////测试CC1101主程序
//const char *g_Ashining = "yangfan";
//uint8_t g_RxBuffer[ 32 ] = { 0 }; 
//int main(void)
//{
//    uint8_t i = 0, x = 0, c;
//    uint8_t buff[17] = "                 ";
//    delay_init( );
//    delay_ms(300);
//    led_init();
//    drv_spi_init( );
//    CC1101_Init( );
//    initial_lcd( );
//    clear_screen( );
//#ifdef TX_MODE
//    while(1){
//        led_on();
//        CC1101_Tx_Packet( (uint8_t *)g_Ashining, 16 , ADDRESS_CHECK );
//        while( CC1101_Read_Status( CC1101_TXBYTES ) & 0x7F )
//        {
//            print_byte( 0, 0, CC1101_Read_Status( CC1101_TXBYTES ) & 0x7F );
//        }
//        print_byte( 0, 0, CC1101_Read_Status( CC1101_TXBYTES ) & 0x7F );
//        led_off();
//        delay_ms(1000);
//    }
//#else
//    display_GB2312_string(0, 0, "start receiving");
//    delay_ms(300);
//    clear_screen();
//    CC1101_Clear_RxBuffer( );
//    CC1101_Set_Mode( RX_MODE );
//    while( 1 )
//    {
//        i = CC1101_Read_Status( CC1101_RXBYTES ) & 0x7F;
//        if( i != 0 )
//        {
//            c = CC1101_Read_Reg( CC1101_RXFIFO );
//            if( c >= '0' && c <= 'z' )
//            {
//                for( x = 0; x < 15; x++ )
//                {
//                    buff[ x ] = buff[ x + 1 ];
//                }
//                buff[ 15 ] = c;
//                buff[ 16 ] = 0;
//            }
//            display_GB2312_string( 0, 0, buff );
//            print_byte( 2, 0, CC1101_Read_Status( CC1101_RXBYTES ) & 0x7F );
//            delay_ms( 20 );
//        }
//    }
//#endif
//}
